Поделиться через


System.Collections.ObjectModel.ObservableCollection<T> класс

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс ObservableCollection<T> представляет динамическую коллекцию данных, которая предоставляет уведомления при добавлении или удалении элементов или при обновлении всего списка.

Во многих случаях данные, с которыми вы работаете, являются коллекцией объектов. Например, распространенный сценарий в привязке данных заключается в использовании ItemsControl, таких как ListBox, ListView или TreeView, для отображения коллекции записей.

Вы можете перечислить любую коллекцию, реализующую интерфейс IEnumerable. Однако чтобы настроить динамические привязки таким образом, чтобы вставки или удаления в коллекции обновлялись автоматически, коллекция должна реализовать интерфейс INotifyCollectionChanged. Этот интерфейс предоставляет событие CollectionChanged, которое должно инициироваться при изменении базовой коллекции.

Класс ObservableCollection<T> — это тип сбора данных, реализующий INotifyCollectionChanged интерфейс.

Прежде чем реализовать собственную коллекцию, рассмотрите возможность использования ObservableCollection<T> или одного из существующих классов коллекций, таких как List<T>, Collection<T>и BindingList<T>, среди многих других. Если у вас есть расширенный сценарий и вы хотите реализовать собственную коллекцию, рассмотрите возможность использования IList, которая предоставляет не универсальную коллекцию объектов, к которым можно получить отдельный доступ по индексу. Реализация IList обеспечивает лучшую производительность подсистемы привязки данных.

Замечание

Для полной поддержки передачи значений данных из исходных объектов привязки в целевые объекты привязки каждый объект в коллекции, поддерживающий привязываемые свойства, должен реализовать соответствующий механизм уведомления об изменении свойства, например интерфейс INotifyPropertyChanged.

Дополнительные сведения см. в разделе "Привязка к коллекциям" в обзоре привязки данных.

Заметки об использовании XAML

ObservableCollection<T> можно использовать в качестве элемента объекта XAML в Windows Presentation Foundation (WPF), в версиях 3.0 и 3.5. Однако использование имеет существенные ограничения.

  • ObservableCollection<T> должен быть корневым элементом, так как x:TypeArguments атрибут, который должен использоваться для указания ограниченного типа универсального ObservableCollection<T> элемента, поддерживается только в элементе объекта для корневого элемента.

  • Необходимо объявить x:Class атрибут (что подразумевает, что действие сборки для этого XAML-файла должно быть Page или иным действием сборки, которое компилирует XAML).

  • ObservableCollection<T> находится в пространстве имен и сборке, которые изначально не сопоставлены с пространством имен XML по умолчанию. Необходимо задать префикс для пространства имен и сборки, а затем использовать этот префикс в теге элемента ObservableCollection<T>.

Более простой способ использования ObservableCollection<T> возможностей из XAML в приложении заключается в объявлении собственного не универсального пользовательского класса коллекции, который наследуется от ObservableCollection<T>и ограничивает его определенным типом. Затем сопоставляйте сборку, содержащую этот класс, и ссылайтесь на нее как элемент объекта в XAML.